Le dataset étant assez conséquent, nous avons procédé par étape. Tout d’abord, quelques lignes n’ont pas été importées d’une manière utilisable. Nous les avons donc converti dans une unité qui nous convenait. Pour les dates, nous avons utilisé le format Date, qui nécessite un jour. On a donc placé toutes les dates au premier jour du mois.

data$`YEAR-MONTH` <- as.Date(paste(data$`YEAR-MONTH`,"-01",sep=""))
data$`MEAN SEA LEVEL PRESSURE HEIGHT FLAG` <- as.character(data$`MEAN SEA LEVEL PRESSURE HEIGHT FLAG`)
data$`MAXIMUM TEMPERATURE (deg C)` <- (data$`MAXIMUM TEMPERATURE (deg C)`)/10
data$`MINIMUM TEMPERATURE (deg C)` <- (data$`MINIMUM TEMPERATURE (deg C)`)/10
data$`MEAN TEMPERATURE (deg C)` <- (data$`MEAN TEMPERATURE (deg C)`)/10

Ensuite, on a isolé la première station avec son ID (01001) pour voir son évolution pendant toutes les années qui ont été registrées.

firstStation <- data %>% filter(`WMO ID` == '01001')
firstStation %>% 
  ggplot(aes(x = firstStation$`YEAR-MONTH`, y = firstStation$`MEAN TEMPERATURE (deg C)`)) + 
  geom_line() + 
  labs(title = "Evolution de la température pour notre première station", x = "Date", y = "Température moyenne")

Une première représentation avec un geom_line() nous rappelle que les saisons existent. Il nous faut donc une représentation plus stable sur l’année.

firstStation %>% 
  ggplot(aes(x = firstStation$`YEAR-MONTH`, y = firstStation$`MEAN TEMPERATURE (deg C)`)) + 
  geom_smooth(method = 'loess', formula = 'y ~ x') +
  labs(title = "Evolution de la température pour notre première station", x = "Date", y = "Température moyenne")

Après vérification, cette première station est assez isolée.

worldMap <- getMap()
world.points <- fortify(worldMap)
## Regions defined for each Polygons
world.points$region <- world.points$id

world.df <- world.points[,c("long","lat","group", "region")]

ggplot() + 
  geom_polygon(data = world.df, aes(x = long, y = lat, group = group)) +
  scale_y_continuous(breaks = (-2:2) * 30) +
  scale_x_continuous(breaks = (-4:4) * 45) +
  coord_map("ortho", orientation=c(50, -20, 0)) +
  geom_point(aes(x = -8.67, y = 70.9), color='red')

Les conditions y sont un peu extrêmes, donc on va chercher des stations plus proches de chez nous. Cela nous permettra en plus de s’assurer que notre dataset a des bonnes infos. A vue de nez, on va situer la France dans une longitude entre -2 et 7, et dans une latitude entre 42 et 50. On va ensuite les grouper par ID pour avoir une seule donnée par station.

franceStations <- data %>% 
  filter(`LONGITUDE (deg)` > -2, `LONGITUDE (deg)` < 7, `LATITUDE (deg)` > 42, `LATITUDE (deg)` < 51)
franceStationsPos <- franceStations %>% distinct(`WMO ID`, .keep_all = TRUE)
worldmap <- ne_countries(scale = 'medium', type = 'map_units',
                         returnclass = 'sf')
france <- worldmap[worldmap$name == 'France',]

ggplot() + geom_sf(data = france) + theme_bw() + geom_point(data = franceStationsPos , aes(x = `LONGITUDE (deg)`, y = `LATITUDE (deg)`), color = "blue")

On aimerait avoir la moyenne de température sur toutes ces stations. On va donc grouper nos relevés par mois, en gardant la moyenne de toutes les stations sur ce mois-ci.

franceStations %>%
  filter(`MEAN TEMPERATURE (deg C)` > -800) %>% # On enlève les relevés sans températures
  group_by(`YEAR-MONTH`) %>%
  summarize(Temp = mean(`MEAN TEMPERATURE (deg C)`)) %>%
    ggplot(aes(x = `YEAR-MONTH`, y = Temp)) + 
    geom_smooth(method = 'loess', formula = 'y ~ x') +
    labs(title = "Evolution de la température moyenne en France", x = "Date", y = "Température moyenne")

On retrouve donc une évolution bien moins extrême, mais qui est toujours là (surtout dans les dernières années).

On aimerait retrouver les périodes de grande chaleur dans les dernières années. La température maximale enregistrée convient parfaitement à notre besoin.

franceStations %>%
  filter(`MAXIMUM TEMPERATURE (deg C)` > -800) %>% # On enlève les relevés sans températures
  group_by(`YEAR-MONTH`) %>%
  summarize(Temp = mean(`MAXIMUM TEMPERATURE (deg C)`)) %>%
    ggplot(aes(x = `YEAR-MONTH`, y = Temp)) + 
    geom_line() +
    labs(title = "Evolution de la température maximale en France", x = "Date", y = "Température moyenne")

On peut ici bien démarquer deux années vers 2005 : ce sont les canicules de 2003 et 2006, la première faisant 15.000 morts. Est-ce qu’on pourrait isoler d’autres évènements importants des dernières années ?

australiaTemp <- data %>%
  filter(`LONGITUDE (deg)` > 113, `LONGITUDE (deg)` < 153, `LATITUDE (deg)` > -35, `LATITUDE (deg)` < -14) %>%
  filter(`YEAR-MONTH` <= as.Date(as.character("2020-12-01")), `YEAR-MONTH` >= as.Date(as.character("2020-01-01"))) %>%
  filter(`MEAN TEMPERATURE (deg C)` > -800) %>% # On enlève les relevés sans températures
  group_by(`YEAR-MONTH`) %>%
  summarize(temp = mean(`MEAN TEMPERATURE (deg C)`))

franceTemp <- franceStations %>%
  filter(`YEAR-MONTH` <= as.Date(as.character("2020-12-01")), `YEAR-MONTH` >= as.Date(as.character("2020-01-01"))) %>%
  filter(`MEAN TEMPERATURE (deg C)` > -800) %>% # On enlève les relevés sans températures
  group_by(`YEAR-MONTH`) %>%
  summarize(temp = mean(`MEAN TEMPERATURE (deg C)`))

data %>%
  filter(`MEAN TEMPERATURE (deg C)` > -800) %>% # On enlève les relevés sans températures
  filter(`YEAR-MONTH` <= as.Date(as.character("2020-12-01")), `YEAR-MONTH` >= as.Date(as.character("2020-01-01"))) %>%
  arrange(`YEAR-MONTH`) %>%
  group_by(`YEAR-MONTH`) %>%
  summarize(globalTemp = mean(`MEAN TEMPERATURE (deg C)`)) %>%
    ggplot(aes(x = `YEAR-MONTH`)) + 
    geom_smooth(aes(y = globalTemp, color = "green"), method = 'loess', formula = 'y ~ x', se=F, show.legend = TRUE) +
    geom_smooth(aes(y = franceTemp$temp, color = "blue"), method = 'loess', formula = 'y ~ x', se=F, show.legend = TRUE) +
    geom_smooth(aes(y = australiaTemp$temp, color = "red"), method = 'loess', formula = 'y ~ x', se=F, show.legend = TRUE) +
    ylim(0, 30) + 
    labs(title = "Evolution de la température moyenne dans le monde, en France, en Australie", x = "Date", y = "Température moyenne") +
  scale_color_identity(name = "Zones",
                       breaks = c("green", "blue", "red"),
                       labels = c("World", "France", "Australia"),
                       guide = "legend")

Ce graphique illustre très bien la différence des saisons entre l’hémisphère Nord et Sud. On remarque de plus que la moyenne sur le monde entier correspond plus à un pays de l’hémisphère Nord qu’une moyenne entre les deux … peut-être à cause de la répartition des stations ?

southStations <- data %>%
  filter(`LATITUDE (deg)` < 0)
northStations <- data %>%
  filter(`LATITUDE (deg)` > 0)
c("South", count(southStations), "North", count(northStations))
## [[1]]
## [1] "South"
## 
## $n
## [1] 202033
## 
## [[3]]
## [1] "North"
## 
## $n
## [1] 631156

Et il y a bien 3 fois plus de relevés dans le nord que dans le sud. Dorénavant, nous allons donc séparer les relevés entre les deux hémisphères. Le cas de l’Australie est très intéressant. Est-ce que les feux de l’année dernière peuvent s’expliquer par la météo ?

australiaTemp <- data %>%
  filter(`LONGITUDE (deg)` > 113, `LONGITUDE (deg)` < 153, `LATITUDE (deg)` > -35, `LATITUDE (deg)` < -14) %>%
  filter(`YEAR-MONTH` <= as.Date(as.character("2020-12-01")), `YEAR-MONTH` >= as.Date(as.character("2010-01-01"))) %>%
  filter(`MAXIMUM TEMPERATURE (deg C)` > -800) %>% # On enlève les relevés sans températures
  filter(`TOTAL PRECIPITATION (mm)` > -800) %>%
  group_by(`YEAR-MONTH`) %>%
  summarize(temp = mean(`MAXIMUM TEMPERATURE (deg C)`), rain = mean(`TOTAL PRECIPITATION (mm)`))
coeff <- 150

plot <- australiaTemp %>%
  ggplot(aes(x = `YEAR-MONTH`)) + 
  geom_line(aes(y = temp, colour = "Temp")) +
  geom_line(aes(y = rain/coeff + 20, colour = "Rain")) +
  labs( colour = "Données" )
ggplotly(plot)